﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AFI.Speargun.Web.Models
{
    public interface ISpeargunRepository
    {
        // Category methods
        Category CreateCategory(Category category);
        void DeleteCategory(Category category);
        Category EditCategory(Category category);
        Category GetCategory(Guid categoryId);

        // Department methods
        Department CreateDepartment(Department department);
        void DeleteDepartment(Department department);
        Department EditDepartment(Department department);
        Department GetDepartment(Guid departmentId);

        // AssetEntry methods
        AssetEntry CreateAssetEntry(AssetEntry assetEntry);
        void DeleteAssetEntry(AssetEntry assetEntry);
        AssetEntry EditAssetEntry(AssetEntry assetEntry);
        AssetEntry GetAssetEntry(Guid assetEntryId);

        // AssetEntryAdditional methods
        AssetEntryAdditional CreateAssetEntryAdditional(AssetEntryAdditional assetEntryAdditional);
        void DeleteAssetEntryAdditional(AssetEntryAdditional assetEntryAdditional);
        AssetEntryAdditional EditAssetEntryAdditional(AssetEntryAdditional assetEntryAdditional);
        AssetEntryAdditional GetAssetEntryAdditional(Guid assetEntryId);

        // Currency methods
        Currency CreateCurrency(Currency currency);
        void DeleteCurrency(Currency currency);
        Currency EditCurrency(Currency currency);
        Currency GetCurrency(Guid currencyId);
        IEnumerable<Currency> ListCurrencies();

        // AcquisitionMode methods
        AcquisitionMode CreateAcquisitionMode(AcquisitionMode acquisitionMode);
        void DeleteAcquisitionMode(AcquisitionMode acquisitionMode);
        AcquisitionMode EditAcquisitionMode(AcquisitionMode acquisitionMode);
        AcquisitionMode GetAcquisitionMode(Guid acquisitionModeId);
        IEnumerable<AcquisitionMode> ListAcquisitionModes();

        // InventoryChecking methods
        InventoryChecking CreateInventoryChecking(InventoryChecking inventoryChecking);
        void DeleteInventoryChecking(InventoryChecking inventoryChecking);
        InventoryChecking EditInventoryChecking(InventoryChecking inventoryChecking);
        InventoryChecking GetInventoryChecking(Guid inventoryCheckingId);
        IEnumerable<InventoryChecking> ListInventoryCheckings();

        // AssetInventory methods
        AssetInventory CreateAssetInventory(AssetInventory assetInventory);
        void DeleteAssetInventory(AssetInventory assetInventory);
        AssetInventory EditAssetInventory(AssetInventory assetInventory);
        AssetInventory GetAssetInventory(Guid assetInventoryId);
        IEnumerable<AssetInventory> ListAssetInventories(Guid assetEntryId);
    }
}
